<template>
  <div class="detail-enterprise">
    <!-- 头部区域 -->
    <header class="add-header">
      <!-- 返回按钮 -->
      <el-page-header content="查看企业" @back="$router.back()" />
    </header>
    <main class="add-main">
      <!-- 表单容器 -->
      <div class="form-container">
        <!-- 标题 -->
        <div class="title">租赁记录</div>
        <!-- 表格容器 -->
        <div class="table-container">
          <el-table :data="form.rent" style="width: 100%" border>
            <!-- 序号列 -->
            <el-table-column prop="index" label="序号" width="50" />
            <!-- 租赁楼宇列 -->
            <el-table-column prop="name" label="租赁楼宇" width="180" />
            <!-- 租赁起止时间列 -->
            <el-table-column label="租赁起止时间" width="280">
              <template #default="{ row }">
                {{ row.startTime }} - {{ row.endTime }}
              </template>
            </el-table-column>
            <!-- 租赁合同列（点击预览） -->
            <el-table-column label="租赁合同(点击预览)">
              <template #default="{ row }">
                <el-button type="text">
                  <!-- 预览合同链接 -->
                  <a :href="`${previewURL}${encodeURIComponent(row.contractUrl)}`" target="_blank">
                    {{ row.contractName }}
                  </a>
                </el-button>
              </template>
            </el-table-column>
            <!-- 录入时间列 -->
            <el-table-column prop="createTime" label="录入时间" />
            <!-- 操作列 -->
            <el-table-column prop="address" label="操作">
              <template #default="{row}">
                <!-- 合同下载按钮 -->
                <el-button type="text" @click="downloadFile(row.contractUrl, row.contractName)">合同下载</el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
      </div>
    </main>
  </div>
</template>

<script>
import { getEnterpriseDetail } from '@/api/enterprise'

export default {
  data() {
    return {
      // 预览合同的基础 URL
      previewURL: 'https://view.officeapps.live.com/op/view.aspx?src=',
      // 表单数据对象
      form: {}
    }
  },
  mounted() {
    // 页面加载时获取企业详情
    this.getDetail()
  },
  methods: {
    // 下载文件
    async downloadFile(url, fileName) {
      try {
        // Blob 是 JavaScript 中的一种数据类型，表示“二进制大对象”（Binary Large Object）。它通常用于处理文件或二进制数据流，比如图片、PDF 文件、视频等。
        // 1. 发送请求获取文件 Blob 数据
        const blob = await fetch(url).then(res => res.blob())
        // 2. 创建临时链接
        const link = document.createElement('a')
        // 3.创建一个指向 Blob 对象的 URL
        link.href = URL.createObjectURL(blob)
        // 4. 设置下载文件名
        link.download = fileName
        // 5. 触发下载
        link.click()
        // 6. 释放内存
        URL.revokeObjectURL(link.href)
      } catch {
        // 捕获错误并提示用户
        this.$message.error('下载失败')
      }
    },
    // 获取企业详情
    async getDetail() {
      try {
        // 1. 调用 API 获取企业详情数据
        const { data } = await getEnterpriseDetail(this.$route.query.id)
        // 2. 格式化租赁记录数据，添加序号
        this.form = {
          // 3. 展开 data 对象的属性
          ...data,
          // 4. 添加序号
          rent: (data.rent || []).map((item, index) => ({
            // 5. 展开 item 对象的属性
            ...item,
            // 6. 添加序号
            index: index + 1
          }))
        }
      } catch {
        // 捕获错误并提示用户
        this.$message.error('获取企业详情失败')
      }
    }
  }
}
</script>

  <style scoped lang="scss">
  .detail-enterprise {
    background-color: #f4f6f8;
    height: 100vh;

    .add-header {
      display: flex;
      align-items: center;
      padding: 0 20px;
      height: 64px;
      background-color: #fff;

      .left {
        span {
          margin-right: 4px;
        }
        .arrow {
          cursor: pointer;
        }
      }

      .right {
        text-align: right;
      }
    }

    .add-main {
      background: #f4f6f8;
      padding: 20px 130px;

      .form-container {
        background-color: #fff;
        margin-bottom: 20px;
        .title {
          height: 60px;
          line-height: 60px;
          padding-left: 20px;
        }
      }
      .table-container {
        padding: 20px;
      }
      .preview {
        img {
          width: 100px;
        }
      }
    }
  }
  </style>
